import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { useUserStore } from '@/store'
import { useTabsStore } from '@/store'

// 进度条配置
NProgress.configure({ showSpinner: false })

// 白名单路由
const whiteList = ['/login']

/**
 * 设置路由守卫
 */
export function setupRouterGuard(router) {
  // 前置守卫
  router.beforeEach(async (to, from, next) => {
    // 开始进度条
    NProgress.start()

    // 设置页面标题
    document.title = to.meta.title 
      ? `${to.meta.title} - ${import.meta.env.VITE_APP_TITLE || 'Vben Admin'}`
      : import.meta.env.VITE_APP_TITLE || 'Vben Admin'

    const userStore = useUserStore()
    const token = userStore.token

    if (token) {
      // 已登录
      if (to.path === '/login') {
        // 如果已登录，跳转到首页
        next({ path: '/' })
        NProgress.done()
      } else {
        // 检查是否已获取用户信息
        if (!userStore.userInfo) {
          try {
            // 获取用户信息
            await userStore.getUserInfo()
            next({ ...to, replace: true })
          } catch (error) {
            // 获取用户信息失败，重置 token 并跳转到登录页
            console.error('获取用户信息失败：', error)
            userStore.resetToken()
            next(`/login?redirect=${to.path}`)
            NProgress.done()
          }
        } else {
          next()
        }
      }
    } else {
      // 未登录
      if (whiteList.includes(to.path)) {
        // 在白名单中，直接访问
        next()
      } else {
        // 不在白名单中，跳转到登录页
        next(`/login?redirect=${to.path}`)
        NProgress.done()
      }
    }
  })

  // 后置守卫
  router.afterEach((to) => {
    // 添加标签页
    if (!to.meta.hidden && to.meta.title) {
      const tabsStore = useTabsStore()
      tabsStore.addTab({
        name: to.name,
        path: to.path,
        title: to.meta.title,
        meta: to.meta
      })
    }

    // 结束进度条
    NProgress.done()
  })

  // 错误处理
  router.onError((error) => {
    console.error('路由错误：', error)
    NProgress.done()
  })
}
